μλ°μ€ν¬λ¦½νΈ μ΄λ²€νΈ 루ν νν€μΉκΈ°: λͺ¨λ μμ€μ κ°λ°μλ₯Ό μν μ’ ν© κ°μ΄λλ‘, λΉλκΈ° νλ‘κ·Έλλ°, λμμ±, μ±λ₯ μ΅μ νλ₯Ό λ€λ£Ήλλ€.
μ΄λ²€νΈ 루ν: λΉλκΈ° μλ°μ€ν¬λ¦½νΈμ μ΄ν΄
μΉμ μΈμ΄μΈ μλ°μ€ν¬λ¦½νΈλ λμ μΈ νΉμ±κ³Ό μνΈμμ©μ μ΄κ³ λ°μμ±μ΄ λ°μ΄λ μ¬μ©μ κ²½νμ λ§λλ λ₯λ ₯μΌλ‘ μ λͺ ν©λλ€. νμ§λ§ ν΅μ¬μ μΌλ‘ μλ°μ€ν¬λ¦½νΈλ μ±κΈ μ€λ λμ΄λ©°, μ΄λ ν λ²μ νλμ μμ λ§ μ€νν μ μμμ μλ―Έν©λλ€. μ΄λ λ€μκ³Ό κ°μ κ³Όμ λ₯Ό μ μν©λλ€: μλ°μ€ν¬λ¦½νΈλ μλ²μμ λ°μ΄ν°λ₯Ό κ°μ Έμ€κ±°λ μ¬μ©μ μ λ ₯μ κΈ°λ€λ¦¬λ κ²κ³Ό κ°μ΄ μκ°μ΄ 걸리λ μμ μ μ²λ¦¬νλ©΄μ λ€λ₯Έ μμ μ μ€νμ μ°¨λ¨νμ§ μκ³ μ ν리μΌμ΄μ μ΄ μλ΅ λΆλ₯ μνμ λΉ μ§μ§ μκ² νλ €λ©΄ μ΄λ»κ² ν΄μΌ ν κΉμ? κ·Έ ν΄λ΅μ λΉλκΈ° μλ°μ€ν¬λ¦½νΈκ° μ΄λ»κ² μλνλμ§ μ΄ν΄νλ λ° μμ΄ κ·Όλ³Έμ μΈ κ°λ μΈ μ΄λ²€νΈ 루νμ μμ΅λλ€.
μ΄λ²€νΈ 루νλ 무μμΈκ°?
μ΄λ²€νΈ 루νλ μλ°μ€ν¬λ¦½νΈμ λΉλκΈ°μ λμμ ꡬλνλ μμ§μ λλ€. μ΄λ μλ°μ€ν¬λ¦½νΈκ° μ±κΈ μ€λ λμμλ λΆκ΅¬νκ³ μ¬λ¬ μμ μ λμμ μ²λ¦¬ν μ μκ² ν΄μ£Όλ λ©μ»€λμ¦μ λλ€. μκ° μλͺ¨μ μΈ μμ μ΄ λ©μΈ μ€λ λλ₯Ό μ°¨λ¨νμ§ μλλ‘ μμ μ νλ¦μ κ΄λ¦¬νλ κ΅ν΅ κ΄μ μ¬λΌκ³ μκ°ν μ μμ΅λλ€.
μ΄λ²€νΈ 루νμ μ£Όμ κ΅¬μ± μμ
- νΈμΆ μ€ν(Call Stack): μλ°μ€ν¬λ¦½νΈ μ½λμ μ€νμ΄ μΌμ΄λλ κ³³μ λλ€. ν¨μκ° νΈμΆλλ©΄ νΈμΆ μ€νμ μΆκ°λκ³ , ν¨μκ° λλλ©΄ μ€νμμ μ κ±°λ©λλ€.
- μΉ API (λλ λΈλΌμ°μ API): λΈλΌμ°μ (λλ Node.js)κ° μ 곡νλ APIλ‘, `setTimeout`, `fetch`, DOM μ΄λ²€νΈμ κ°μ λΉλκΈ° μμ μ μ²λ¦¬ν©λλ€. μ΄λ€μ λ©μΈ μλ°μ€ν¬λ¦½νΈ μ€λ λμμ μ€νλμ§ μμ΅λλ€.
- μ½λ°± ν (λλ νμ€ν¬ ν): μ€ν λκΈ° μ€μΈ μ½λ°± ν¨μλ€μ 보κ΄νλ νμ λλ€. μ΄ μ½λ°±λ€μ λΉλκΈ° μμ μ΄ μλ£λ λ(μ: νμ΄λ¨Έκ° λ§λ£λκ±°λ μλ²μμ λ°μ΄ν°κ° μμ λ ν) μΉ APIμ μν΄ νμ λ°°μΉλ©λλ€.
- μ΄λ²€νΈ 루ν: νΈμΆ μ€νκ³Ό μ½λ°± νλ₯Ό μ§μμ μΌλ‘ κ°μνλ ν΅μ¬ κ΅¬μ± μμμ λλ€. νΈμΆ μ€νμ΄ λΉμ΄ μμΌλ©΄, μ΄λ²€νΈ 루νλ μ½λ°± νμμ 첫 λ²μ§Έ μ½λ°±μ κ°μ Έμ μ€νμ μν΄ νΈμΆ μ€νμ νΈμν©λλ€.
κ°λ¨ν `setTimeout` μμ λ₯Ό ν΅ν΄ μ΄λ₯Ό μ€λͺ ν΄ λ³΄κ² μ΅λλ€:
console.log('Start');
setTimeout(() => {
console.log('Inside setTimeout');
}, 2000);
console.log('End');
μ½λλ λ€μκ³Ό κ°μ΄ μ€νλ©λλ€:
- `console.log('Start')` λ¬Έμ΄ μ€νλμ΄ μ½μμ μΆλ ₯λ©λλ€.
- `setTimeout` ν¨μκ° νΈμΆλ©λλ€. μ΄λ μΉ API ν¨μμ λλ€. μ½λ°± ν¨μ `() => { console.log('Inside setTimeout'); }`κ° 2000λ°λ¦¬μ΄(2μ΄)μ μ§μ° μκ°κ³Ό ν¨κ» `setTimeout` ν¨μμ μ λ¬λ©λλ€.
- `setTimeout`μ νμ΄λ¨Έλ₯Ό μμνλ©°, κ²°μ μ μΌλ‘ λ©μΈ μ€λ λλ₯Ό μ°¨λ¨νμ§ *μμ΅λλ€*. μ½λ°±μ μ¦μ μ€νλμ§ μμ΅λλ€.
- `console.log('End')` λ¬Έμ΄ μ€νλμ΄ μ½μμ μΆλ ₯λ©λλ€.
- 2μ΄(λλ κ·Έ μ΄μ) ν, `setTimeout`μ νμ΄λ¨Έκ° λ§λ£λ©λλ€.
- μ½λ°± ν¨μκ° μ½λ°± νμ λ°°μΉλ©λλ€.
- μ΄λ²€νΈ 루νλ νΈμΆ μ€νμ νμΈν©λλ€. λ§μ½ μ€νμ΄ λΉμ΄ μλ€λ©΄(μ¦, νμ¬ μ€ν μ€μΈ λ€λ₯Έ μ½λκ° μλ€λ©΄), μ΄λ²€νΈ 루νλ μ½λ°± νμμ μ½λ°±μ κ°μ Έμ νΈμΆ μ€νμ νΈμν©λλ€.
- μ½λ°± ν¨μκ° μ€νλκ³ , `console.log('Inside setTimeout')`μ΄ μ½μμ μΆλ ₯λ©λλ€.
μΆλ ₯ κ²°κ³Όλ λ€μκ³Ό κ°μ΅λλ€:
Start
End
Inside setTimeout
'Inside setTimeout'μ΄ 'End'λ³΄λ€ λ¨Όμ μ μλμμμλ λΆκ΅¬νκ³ 'End'κ° λ¨Όμ μΆλ ₯λλ κ²μ μ£Όλͺ©νμΈμ. μ΄λ λΉλκΈ°μ λμμ 보μ¬μ€λλ€: `setTimeout` ν¨μλ νμ μ½λμ μ€νμ μ°¨λ¨νμ§ μμ΅λλ€. μ΄λ²€νΈ 루νλ μ§μ λ μ§μ° μκ° *μ΄ν* κ·Έλ¦¬κ³ *νΈμΆ μ€νμ΄ λΉμ΄ μμ λ* μ½λ°± ν¨μκ° μ€νλλλ‘ λ³΄μ₯ν©λλ€.
λΉλκΈ° μλ°μ€ν¬λ¦½νΈ κΈ°λ²
μλ°μ€ν¬λ¦½νΈλ λΉλκΈ° μμ μ μ²λ¦¬νλ μ¬λ¬ κ°μ§ λ°©λ²μ μ 곡ν©λλ€:
μ½λ°± (Callbacks)
μ½λ°±μ κ°μ₯ κΈ°λ³Έμ μΈ λ©μ»€λμ¦μ λλ€. λ€λ₯Έ ν¨μμ μΈμλ‘ μ λ¬λμ΄ λΉλκΈ° μμ μ΄ μλ£λ λ μ€νλλ ν¨μμ λλ€. κ°λ¨νμ§λ§, μ¬λ¬ κ°μ μ€μ²©λ λΉλκΈ° μμ μ μ²λ¦¬ν λ "μ½λ°± μ§μ₯" λλ "νλ©Έμ νΌλΌλ―Έλ"λ‘ μ΄μ΄μ§ μ μμ΅λλ€.
function fetchData(url, callback) {
fetch(url)
.then(response => response.json())
.then(data => callback(data))
.catch(error => console.error('Error:', error));
}
fetchData('https://api.example.com/data', (data) => {
console.log('Data received:', data);
});
νλ‘λ―Έμ€ (Promises)
νλ‘λ―Έμ€λ μ½λ°± μ§μ₯ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ λμ λμμ΅λλ€. νλ‘λ―Έμ€λ λΉλκΈ° μμ μ μ΅μ’ μλ£(λλ μ€ν¨)μ κ·Έ κ²°κ³Ό κ°μ λνλ΄λ κ°μ²΄μ λλ€. νλ‘λ―Έμ€λ `.then()`μ μ¬μ©νμ¬ λΉλκΈ° μμ μ μ°κ²°νκ³ `.catch()`λ₯Ό μ¬μ©νμ¬ μ€λ₯λ₯Ό μ²λ¦¬ν¨μΌλ‘μ¨ λΉλκΈ° μ½λλ₯Ό λ μ½κΈ° μ½κ³ κ΄λ¦¬νκΈ° μ½κ² λ§λλλ€.
function fetchData(url) {
return fetch(url)
.then(response => response.json());
}
fetchData('https://api.example.com/data')
.then(data => {
console.log('Data received:', data);
})
.catch(error => {
console.error('Error:', error);
});
Async/Await
Async/Awaitλ νλ‘λ―Έμ€ μμ ꡬμΆλ ꡬ문μ λλ€. μ΄λ λΉλκΈ° μ½λλ₯Ό λκΈ° μ½λμ²λΌ 보μ΄κ² νκ³ λμνκ² νμ¬ κ°λ μ±κ³Ό μ΄ν΄λλ₯Ό λμ± λμ λλ€. `async` ν€μλλ λΉλκΈ° ν¨μλ₯Ό μ μΈνλ λ° μ¬μ©λλ©°, `await` ν€μλλ νλ‘λ―Έμ€κ° ν΄κ²°λ λκΉμ§ μ€νμ μΌμ μ€μ§νλ λ° μ¬μ©λ©λλ€. μ΄λ λΉλκΈ° μ½λλ₯Ό λ μμ°¨μ μΌλ‘ λλΌκ² νμ¬ κΉμ μ€μ²©μ νΌνκ³ κ°λ μ±μ ν₯μμν΅λλ€.
async function fetchData(url) {
try {
const response = await fetch(url);
const data = await response.json();
console.log('Data received:', data);
} catch (error) {
console.error('Error:', error);
}
}
fetchData('https://api.example.com/data');
λμμ±(Concurrency)κ³Ό λ³λ ¬μ±(Parallelism)
λμμ±κ³Ό λ³λ ¬μ±μ ꡬλ³νλ κ²μ΄ μ€μν©λλ€. μλ°μ€ν¬λ¦½νΈμ μ΄λ²€νΈ 루νλ μ¬λ¬ μμ μ *λ§μΉ* λμμ μ²λ¦¬νλ κ²μ²λΌ 보μ΄λ λμμ±μ κ°λ₯νκ² ν©λλ€. νμ§λ§ λΈλΌμ°μ λ Node.jsμ μ±κΈ μ€λ λ νκ²½μμ μλ°μ€ν¬λ¦½νΈλ μΌλ°μ μΌλ‘ λ©μΈ μ€λ λμμ ν λ²μ νλμ μμ μ μμ°¨μ μΌλ‘ μ€νν©λλ€. λ°λ©΄μ λ³λ ¬μ±μ μ¬λ¬ μμ μ *μ§μ μΌλ‘ λμμ* μ€ννλ κ²μ μλ―Έν©λλ€. μλ°μ€ν¬λ¦½νΈ μ체λ μ§μ ν λ³λ ¬μ±μ μ 곡νμ§ μμ§λ§, μΉ μ컀(λΈλΌμ°μ )λ `worker_threads` λͺ¨λ(Node.js)κ³Ό κ°μ κΈ°μ μ μ¬μ©νλ©΄ λ³λμ μ€λ λλ₯Ό νμ©νμ¬ λ³λ ¬ μ€νμ ν μ μμ΅λλ€. μΉ μ컀λ₯Ό μ¬μ©νλ©΄ κ³μ° μ§μ½μ μΈ μμ μ μ€νλ‘λνμ¬ λ©μΈ μ€λ λκ° μ°¨λ¨λλ κ²μ λ°©μ§νκ³ μΉ μ ν리μΌμ΄μ μ λ°μμ±μ κ°μ ν μ μμΌλ©°, μ΄λ μ μΈκ³ μ¬μ©μμκ² μ€μν©λλ€.
μ€μ μ¬λ‘ λ° κ³ λ € μ¬ν
μ΄λ²€νΈ 루νλ μΉ κ°λ° λ° Node.js κ°λ°μ μ¬λ¬ μΈ‘λ©΄μμ λ§€μ° μ€μν©λλ€:
- μΉ μ ν리μΌμ΄μ : μ¬μ©μ μνΈμμ©(ν΄λ¦, μμ μ μΆ) μ²λ¦¬, APIμμ λ°μ΄ν° κ°μ Έμ€κΈ°, μ¬μ©μ μΈν°νμ΄μ€(UI) μ λ°μ΄νΈ, μ λλ©μ΄μ κ΄λ¦¬λ λͺ¨λ μ΄λ²€νΈ 루νμ ν¬κ² μμ‘΄νμ¬ μ ν리μΌμ΄μ μ λ°μμ±μ μ μ§ν©λλ€. μλ₯Ό λ€μ΄, κΈλ‘λ² μ μμκ±°λ μΉμ¬μ΄νΈλ μμ² κ°μ λμ μ¬μ©μ μμ²μ ν¨μ¨μ μΌλ‘ μ²λ¦¬ν΄μΌ νλ©°, UIλ λ§€μ° λ°μμ±μ΄ λ°μ΄λμΌ νλλ°, μ΄ λͺ¨λ κ²μ΄ μ΄λ²€νΈ 루ν λλΆμ κ°λ₯ν©λλ€.
- Node.js μλ²: Node.jsλ μ΄λ²€νΈ 루νλ₯Ό μ¬μ©νμ¬ λμ ν΄λΌμ΄μΈνΈ μμ²μ ν¨μ¨μ μΌλ‘ μ²λ¦¬ν©λλ€. μ΄λ₯Ό ν΅ν΄ λ¨μΌ Node.js μλ² μΈμ€ν΄μ€κ° μ°¨λ¨ μμ΄ λ§μ ν΄λΌμ΄μΈνΈλ₯Ό λμμ μλΉμ€ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, μ μΈκ³ μ¬μ©μκ° μλ μ±ν μ ν리μΌμ΄μ μ μ΄λ²€νΈ 루νλ₯Ό νμ©νμ¬ λ§μ λμ μ¬μ©μ μ°κ²°μ κ΄λ¦¬ν©λλ€. κΈλ‘λ² λ΄μ€ μΉμ¬μ΄νΈλ₯Ό μλΉμ€νλ Node.js μλ²λ ν° μ΄μ μ μ»μ΅λλ€.
- API: μ΄λ²€νΈ 루νλ μ±λ₯ λ³λͺ© νμ μμ΄ μλ§μ μμ²μ μ²λ¦¬ν μ μλ λ°μμ± μ’μ API μμ±μ μ©μ΄νκ² ν©λλ€.
- μ λλ©μ΄μ λ° UI μ λ°μ΄νΈ: μ΄λ²€νΈ 루νλ μΉ μ ν리μΌμ΄μ μμ λΆλλ¬μ΄ μ λλ©μ΄μ κ³Ό UI μ λ°μ΄νΈλ₯Ό μ‘°μ¨ν©λλ€. UIλ₯Ό λ°λ³΅μ μΌλ‘ μ λ°μ΄νΈνλ €λ©΄ μ΄λ²€νΈ 루νλ₯Ό ν΅ν΄ μ λ°μ΄νΈλ₯Ό μ€μΌμ€λ§ν΄μΌ νλ©°, μ΄λ μ’μ μ¬μ©μ κ²½νμ λ§€μ° μ€μν©λλ€.
μ±λ₯ μ΅μ ν λ° λͺ¨λ² μ¬λ‘
μ±λ₯μ΄ λ°μ΄λ μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μμ±νλ €λ©΄ μ΄λ²€νΈ 루νλ₯Ό μ΄ν΄νλ κ²μ΄ νμμ μ λλ€:
- λ©μΈ μ€λ λ μ°¨λ¨ λ°©μ§: μ€λ μ€νλλ λκΈ° μμ μ λ©μΈ μ€λ λλ₯Ό μ°¨λ¨νμ¬ μ ν리μΌμ΄μ μ μλ΅ λΆλ₯ μνλ‘ λ§λ€ μ μμ΅λλ€. `setTimeout`μ΄λ `async/await` κ°μ κΈ°μ μ μ¬μ©νμ¬ ν° μμ μ λ μκ³ λΉλκΈ°μ μΈ λ©μ΄λ¦¬λ‘ λλμΈμ.
- μΉ APIμ ν¨μ¨μ μΈ μ¬μ©: λΉλκΈ° μμ μ μν΄ `fetch` λ° `setTimeout`κ³Ό κ°μ μΉ APIλ₯Ό νμ©νμΈμ.
- μ½λ νλ‘νμΌλ§ λ° μ±λ₯ ν μ€νΈ: λΈλΌμ°μ κ°λ°μ λꡬλ Node.js νλ‘νμΌλ§ λꡬλ₯Ό μ¬μ©νμ¬ μ½λμ μ±λ₯ λ³λͺ© νμμ μλ³νκ³ κ·Έμ λ°λΌ μ΅μ ννμΈμ.
- μΉ μ컀/μ컀 μ€λ λ μ¬μ©(ν΄λΉνλ κ²½μ°): κ³μ° μ§μ½μ μΈ μμ μ κ²½μ°, λΈλΌμ°μ μ μΉ μ컀λ Node.jsμ μ컀 μ€λ λλ₯Ό μ¬μ©νμ¬ μμ μ λ©μΈ μ€λ λμμ λΆλ¦¬νκ³ μ§μ ν λ³λ ¬μ±μ λ¬μ±νλ κ²μ κ³ λ €νμΈμ. μ΄λ νΉν μ΄λ―Έμ§ μ²λ¦¬λ 볡μ‘ν κ³μ°μ μ μ©ν©λλ€.
- DOM μ‘°μ μ΅μν: λΉλ²ν DOM μ‘°μμ λΉμ©μ΄ λ§μ΄ λ€ μ μμ΅λλ€. DOM μ λ°μ΄νΈλ₯Ό μΌκ΄ μ²λ¦¬νκ±°λ κ°μ DOM(μ: React λλ Vue.js μ¬μ©)κ³Ό κ°μ κΈ°μ μ μ¬μ©νμ¬ λ λλ§ μ±λ₯μ μ΅μ ννμΈμ.
- μ½λ°± ν¨μ μ΅μ ν: λΆνμν μ€λ²ν€λλ₯Ό νΌνκΈ° μν΄ μ½λ°± ν¨μλ₯Ό μκ³ ν¨μ¨μ μΌλ‘ μ μ§νμΈμ.
- μ°μν μ€λ₯ μ²λ¦¬: νλ‘λ―Έμ€μ `.catch()`λ async/awaitμ `try...catch`λ₯Ό μ¬μ©νλ λ± μ μ ν μ€λ₯ μ²λ¦¬λ₯Ό ꡬννμ¬ μ²λ¦¬λμ§ μμ μμΈκ° μ ν리μΌμ΄μ μ μ€λ¨μν€λ κ²μ λ°©μ§νμΈμ.
κΈλ‘λ² κ³ λ € μ¬ν
κΈλ‘λ² μ¬μ©μλ₯Ό μν μ ν리μΌμ΄μ μ κ°λ°ν λ λ€μ μ¬νμ κ³ λ €νμΈμ:
- λ€νΈμν¬ μ§μ° μκ°: μΈκ³ κ°μ§μ μ¬μ©μλ€μ λ€μν λ€νΈμν¬ μ§μ° μκ°μ κ²½νν κ²μ λλ€. 리μμ€μ μ μ§μ λ‘λ©μ μ¬μ©νκ³ ν¨μ¨μ μΈ API νΈμΆμ μ¬μ©νμ¬ μ΄κΈ° λ‘λ μκ°μ μ€μ΄λ λ± λ€νΈμν¬ μ§μ°μ μ°μνκ² μ²λ¦¬νλλ‘ μ ν리μΌμ΄μ μ μ΅μ ννμΈμ. μμμμ μ½ν μΈ λ₯Ό μ 곡νλ νλ«νΌμ κ²½μ°, μ±κ°ν¬λ₯΄μ λΉ λ₯Έ μλ²κ° μ΄μμ μΌ μ μμ΅λλ€.
- νμ§ν λ° κ΅μ ν(i18n): μ ν리μΌμ΄μ μ΄ μ¬λ¬ μΈμ΄μ λ¬Ένμ μ νΈλ₯Ό μ§μνλλ‘ νμΈμ.
- μ κ·Όμ±: μ₯μ κ° μλ μ¬μ©μκ° μ ν리μΌμ΄μ μ μ κ·Όν μ μλλ‘ λ§λμΈμ. ARIA μμ±μ μ¬μ©νκ³ ν€λ³΄λ νμμ μ 곡νλ κ²μ κ³ λ €νμΈμ. λ€μν νλ«νΌκ³Ό μ€ν¬λ¦° 리λμμ μ ν리μΌμ΄μ μ ν μ€νΈνλ κ²μ΄ μ€μν©λλ€.
- λͺ¨λ°μΌ μ΅μ ν: μ μΈκ³ λ§μ μ¬μ©μκ° μ€λ§νΈν°μ ν΅ν΄ μΈν°λ·μ μ μνλ―λ‘ μ ν리μΌμ΄μ μ΄ λͺ¨λ°μΌ μ₯μΉμ μ΅μ νλμλμ§ νμΈνμΈμ. μ¬κΈ°μλ λ°μν λμμΈκ³Ό μ΅μ νλ μμ° ν¬κΈ°κ° ν¬ν¨λ©λλ€.
- μλ² μμΉ λ° μ½ν μΈ μ μ‘ λ€νΈμν¬(CDN): CDNμ νμ©νμ¬ μ§λ¦¬μ μΌλ‘ λ€μν μμΉμμ μ½ν μΈ λ₯Ό μ 곡ν¨μΌλ‘μ¨ μ μΈκ³ μ¬μ©μμ μ§μ° μκ°μ μ΅μννμΈμ. μ μΈκ³ μ¬μ©μμκ² λ κ°κΉμ΄ μλ²μμ μ½ν μΈ λ₯Ό μ 곡νλ κ²μ κΈλ‘λ² μ¬μ©μμκ² μ€μν©λλ€.
κ²°λ‘
μ΄λ²€νΈ 루νλ ν¨μ¨μ μΈ λΉλκΈ° μλ°μ€ν¬λ¦½νΈ μ½λλ₯Ό μ΄ν΄νκ³ μμ±νλ λ° μμ΄ κΈ°λ³Έμ μΈ κ°λ μ λλ€. κ·Έκ²μ΄ μ΄λ»κ² μλνλμ§ μ΄ν΄ν¨μΌλ‘μ¨, λ©μΈ μ€λ λλ₯Ό μ°¨λ¨νμ§ μκ³ μ¬λ¬ μμ μ λμμ μ²λ¦¬νλ λ°μμ± μκ³ μ±λ₯μ΄ λ°μ΄λ μ ν리μΌμ΄μ μ ꡬμΆν μ μμ΅λλ€. κ°λ¨ν μΉ μ ν리μΌμ΄μ μ ꡬμΆνλ 볡μ‘ν Node.js μλ²λ₯Ό ꡬμΆνλ , μ΄λ²€νΈ 루νμ λν νμ€ν μ΄ν΄λ μ μΈκ³ μ¬μ©μμκ² λΆλλ½κ³ λ§€λ ₯μ μΈ μ¬μ©μ κ²½νμ μ 곡νκ³ μ νλ λͺ¨λ μλ°μ€ν¬λ¦½νΈ κ°λ°μμκ² νμμ μ λλ€.